﻿
#region 版权声明





//



// 
// 代码开源主要用于解决大家在学习和研究协议过程中遇到由于缺乏代码所带来的制约性问题。
// 本代码仅供学习交流使用，大家在使用此开发包前请自行协调好多方面关系，
// 不得用于任何商业用途和非法用途，本人不享受和承担由此产生的任何权利以及任何法律责任。
// 
// 本源代码可通过以下网址获取:
// http://www.vckers.com
//
// Copyright @ 2009-2010  vckers.com.  All Rights Reserved.   
// Framework: 3.5

  

 
//   
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details. 
  
#endregion

using System;
using System.Collections.Generic;
using System.Text;

namespace TS.QQ.Entities
{
    /// <summary>
    /// 接收到的消息的头部格式封装类
    /// </summary>
    public class ReceiveIMHeader
    {
        public int Sender { get; set; }
        public uint Receiver { get; set; }
        public uint Sequence { get; set; }
        public byte[] SenderIP { get; set; }
        public uint SenderPort { get; set; }
        public RecvSource Type { get; set; }

        /// <summary>
        /// 给定一个输入流，解析ReceiveIMHeader结构
    /// </summary>
        /// <param name="buf">The buf.</param>
        public void Read(ByteBuffer buf)
        {
            // 发送者QQ号或者群内部ID
            Sender = buf.GetInt();
            // 接收者QQ号
            Receiver = buf.GetUInt();
            // 包序号，这个序号似乎和我们发的包里面的序号不同，至少这个是int，我们发的是char
            //     可能这个序号是服务器端生成的一个总的消息序号
            Sequence = buf.GetUInt();
            // 发送者IP，如果是服务器转发的，那么ip就是服务器ip
            SenderIP = buf.GetByteArray(4);
            // 发送者端口，如果是服务器转发的，那么就是服务器的端口 两个字节
            SenderPort = buf.GetUShort();
            // 消息类型，是好友发的，还是陌生人发的，还是系统消息等等
            Type = (RecvSource)buf.GetUShort();
        }
    }
}
